<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>792. 匹配子序列的单词数</title>
</head>
<body>
    <script>
    //         给定字符串 s 和字符串数组 words, 返回  words[i] 中是s的子序列的单词个数 。

    // 字符串的 子序列 是从原始字符串中生成的新字符串，可以从中删去一些字符(可以是none)，而不改变其余字符的相对顺序。

    // 例如， “ace” 是 “abcde” 的子序列。
    //  

    // 示例 1:

    // 输入: s = "abcde", words = ["a","bb","acd","ace"]
    // 输出: 3
    // 解释: 有三个是 s 的子序列的单词: "a", "acd", "ace"。
    // Example 2:

    // 输入: s = "dsahjpjauf", words = ["ahjpjau","ja","ahbwzgqnuk","tnmlanowax"]
    // 输出: 2
    //  

    // 提示:

    // 1 <= s.length <= 5 * 104
    // 1 <= words.length <= 5000
    // 1 <= words[i].length <= 50
    // words[i]和 s 都只由小写字母组成。

    // 来源：力扣（LeetCode）
    // 链接：https://leetcode.cn/problems/number-of-matching-subsequences
    // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
    /**
     * @param {string} s
     * @param {string[]} words
     * @return {number}
     */
    var numMatchingSubseq = function(s, words) {
        // let num = 0
        // words.forEach(item => {
        //     // debugger
        //     let list = s
        //     let isAll = true
        //     for (let i = 0; i < item.length; i++) {
        //         if (list.indexOf(item[i]) !== -1) {
        //             list.substr(list.indexOf(item[i])+1)
        //         } else {
        //             isAll = false
        //             break
        //         }
        //     }
        //     if (isAll) {
        //         num++
        //     }
        // })
        // return num

         //记录words[i] 中是s的子序列的单词个数 
        let res =0;
        let a =s;
        for(let i=0;i<words.length;i++){
            //题目要求不改变其余字符的相对顺序，所以不需要排序
            let va=words[i]
            for(let j=0;j<va.length;j++){
                //数组中元素的字符存在s中，则截取存在元素后面的字符串继续进行判断
                if(s.indexOf(va[j])>-1){
                s=s.substr(s.indexOf(va[j])+1)
                }else{//如果不存在，跳出此次循环
                    break;
                }
                //执行到此处，数组中元素的每一个字符都进行了对比，都在s中存在
                if(j===words[i].length-1){
                    res++
                }
            }
            //复原s，进行新一轮的对比
            s=a;
        }
        return res
    };
    console.log(numMatchingSubseq('abcde', ["a","bb","acd","ace"]));
    </script>
</body>
</html>